<?php
/**
 * ICore
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category ICore
 * @package


ICore_Db
 * @copyright Copyright (c) 2008 Negrutsa igor (progi2007@gmail.com)e/
 * @license

http://framework.zend.com/license/new-bsd

   New BSD License
 */

/**
 * @see Zend_Db_Table_Abstract
 */
require_once "Zend/Db/Table/Abstract.php";

/**
 * ICore_Db_Table перегружает и расширяет Zend_Db_Table_Abstract
 *
 * @category   ICore
 * @package    ICore_Db
 * @copyright  Copyright (c) 2008 Negrutsa igor (progi2007@gmail.com)
 * @license    http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0
 */
class ICore_Db_Table extends Zend_Db_Table_Abstract
{

	/**
     * @var string
     */
    protected $_rowClass  = 'ICore_Db_Row';



	/**
	 * Метод возвращает имя таблицы
	 *
	 * @return string
	 */



	public function getTableName()
	{
		return $this->_name;
	}

	/**
 	* Метод возвращает кол-во строк
 	*
 	* @param string|null $where
 	* @param string|null $order
 	* @return string
 	*/



public function getTotal( $where = null, $order = null )
{
   if ( $where ){
		$where = "WHERE ($where)";
   }
      if ( $order ){




$order = "ORDER BY $order";
      }
      $result = $this->_db->fetchOne( "SELECT count(*) FROM {$this->_name} {$where} {$order}" );
      return $result;
    }






/**



 * Метод осуществляет чистку и вставку данных.



 *



 * @param array $data



 * @return int



 */



public function insert ( array $data )



{





return parent::insert( $this->dataFilter( $data ) );



}






/**



 * Метод осуществляет чистку и обновление данных.



 *



 * @param array $data



 * @param string $where



 * @return int



 */



public function update ( array $data, $where )



{








return parent::update( $this->dataFilter( $data ), $where );



}






/**



 * Метод осуществляет обновление сразу нескольких строк.



 *



 * @param array $data



 * @param string $field



 * @param int $id



 * @return int



 */



public function updateAll( $data, $field, $id )



{



    $result = 0;





if( is_array( $data ) ){



        foreach( $data as $key => $value ){



            $result += parent::update( array( $field => $value ), "$id = '$key'" );



        }



    }



    return $result;



}






/**



 * Метод осуществляет удаление строки по id



 *



 * @param int $id



 * @return int



 */



public function deleteOne( $id ){



    return parent::delete( "{$this->_primary} = $id" );



}






/**



 * Метод проверяет на существование записи в БД



 *



 * @param string $where



 * @return Zend_Db_Table_Rowset_Abstract



 */



public function exists( $where )



{





return $this->fetchAll($where)->count() > 0 ? true : false;



}






/**



 * Метод чистит данные.



 *



 * @param array $data



 * @return array



 */
    protected  function dataFilter( $data )



{



    return array_intersect_key( $data, array_combine($this->_getCols(), $this->_getCols()));



}
}
?>